from hide_info import hide_as_img
import tkinter as tk
from tkinter import filedialog, messagebox

def select_file(title, filetypes):
    return filedialog.askopenfilename(title=title, filetypes=filetypes)

def save_file(title, defaultextension, filetypes):
    return filedialog.asksaveasfilename(title=title, defaultextension=defaultextension, filetypes=filetypes)

def encode_file(input_entry, output_entry):
    input_file = input_entry.get()
    output_img = output_entry.get()
    
    if not all([input_file, output_img]):
        status_label.config(text="错误: 请选择输入文件和输出图片路径", fg="red")
        return
    
    try:
        hide_as_img.file_encode(filename=input_file, img_filename=output_img)
        status_label.config(text=f"成功: 文件已转换为图片!\n输出路径: {output_img}", fg="green")
    except Exception as e:
        status_label.config(text=f"错误: {str(e)}", fg="red")

def decode_file(input_entry, output_entry):
    input_img = input_entry.get()
    output_file = output_entry.get()
    
    if not all([input_img, output_file]):
        status_label.config(text="错误: 请选择输入图片和输出文件路径", fg="red")
        return
    
    try:
        hide_as_img.file_decode(filename=output_file, img_filename=input_img)
        status_label.config(text=f"成功: 图片已转换回文件!\n输出路径: {output_file}", fg="green")
    except Exception as e:
        status_label.config(text=f"错误: {str(e)}", fg="red")

# 创建主窗口
root = tk.Tk()
root.title("化物为图工具")
root.geometry("600x400")

# 创建两个功能框架
encode_frame = tk.LabelFrame(root, text="文件转图片", padx=10, pady=10)
encode_frame.pack(side=tk.LEFT, fill=tk.BOTH, expand=True, padx=5, pady=5)

decode_frame = tk.LabelFrame(root, text="图片转文件", padx=10, pady=10)
decode_frame.pack(side=tk.RIGHT, fill=tk.BOTH, expand=True, padx=5, pady=5)

# 文件转图片区域
tk.Label(encode_frame, text="输入文件:").pack()
encode_input_entry = tk.Entry(encode_frame, width=40)
encode_input_entry.pack()
tk.Button(encode_frame, text="选择文件", command=lambda: encode_input_entry.insert(0, select_file("选择要隐藏的文件", [("所有文件", "*.*")]))).pack()

tk.Label(encode_frame, text="输出图片:").pack()
encode_output_entry = tk.Entry(encode_frame, width=40)
encode_output_entry.pack()
tk.Button(encode_frame, text="选择输出路径", command=lambda: encode_output_entry.insert(0, save_file("选择保存位置", ".png", [("PNG图片", "*.png")]))).pack(pady=5)

tk.Button(encode_frame, text="开始转换", command=lambda: encode_file(encode_input_entry, encode_output_entry)).pack(pady=10)

# 图片转文件区域
tk.Label(decode_frame, text="输入图片:").pack()
decode_input_entry = tk.Entry(decode_frame, width=40)
decode_input_entry.pack()
tk.Button(decode_frame, text="选择图片", command=lambda: decode_input_entry.insert(0, select_file("选择要解码的图片", [("PNG图片", "*.png")]))).pack()

tk.Label(decode_frame, text="输出文件:").pack()
decode_output_entry = tk.Entry(decode_frame, width=40)
decode_output_entry.pack()
tk.Button(decode_frame, text="选择输出路径", command=lambda: decode_output_entry.insert(0, save_file("选择保存位置", "", [("所有文件", "*.*")]))).pack(pady=5)

tk.Button(decode_frame, text="开始转换", command=lambda: decode_file(decode_input_entry, decode_output_entry)).pack(pady=10)

# 状态标签
status_label = tk.Label(root, text="", fg="red")
status_label.pack(side=tk.BOTTOM, fill=tk.X, pady=10)

root.mainloop()